package com.linkdood.app.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.linkdood.app.domain.User;
import com.linkdood.app.vm.UserVM;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * UserMapper
 *
 * @author YunJ
 */
@Repository
public interface UserMapper extends BaseMapper<User> {

    /**
     * 获取具体组织部门下的 user
     */
    @Select("SELECT * FROM `user`" +
        "LEFT JOIN `user_organization` ON user.id = user_organization.user_id " +
        "WHERE user.third_party_id = #{thirdPartyId} " +
        "AND user_organization.org_id = #{orgId}")
    List<User> getUserByOrgId(@Param("orgId") Long orgId,
                              @Param("thirdPartyId") String thirdPartyId);

    /**
     * 根据用户名称，系统角色 查询用户列表
     *
     * @param displayName 用户名
     * @param role        系统角色
     * @param pageSkip    分页参数
     * @param size        分页参数
     * @return Page<UserAccount>
     */
    List<UserVM> listUserAccountPageByNameAndPhone(@Param("displayName") String displayName,
                                                   @Param("phoneNum") String role,
                                                   @Param("sourceId") String sourceId,
                                                   @Param("orgId") String orgId,
                                                   Long pageSkip, Long size);

    /**
     * 统计数量
     */
    Long countUserAccountPageByNameAndPhone(@Param("displayName") String displayName,
                                            @Param("phoneNum") String role,
                                            @Param("sourceId") String sourceId,
                                            @Param("orgId") String orgId);

    /**
     * 查询用户列表
     * @param displayName 用户姓名
     * @param phoneNum 电话
     * @param noRoles 用户不在的角色
     */
    Page<UserVM> pageByNameAndPhoneAndNoRoles(@Param("displayName") String displayName,
                                    @Param("phoneNum") String phoneNum,
                                    @Param("noRoles") String noRoles,
                                    Page<User> page);
}
